﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sio.Mdm.Entities;
using Sio.Mdm.Types.Database;
using Ext.Net;

namespace Sio.Mdm.Web.Instalacija.Varnost
{
    public partial class FunkcionalnostiZetoni : Controls.Page
    {
        public interface ZetonRowEditData
        {
            int VarnostniZetonId { get; set; }
            int FunkcionalnostId { get; set; }
            bool Branje { get; set; }
            bool Pisanje { get; set; }
        } 

        #region OnLoad
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (!IsPostBack && !X.IsAjaxRequest)
            {
                //občine
                EntityCollection<VarnostniZeton> obcine = new EntityCollection<VarnostniZeton>(
                  new Filter<VarnostniZeton>().Where(o => o.VarnostniZetonId != null).OrderBy(o => o.Naziv));
                this.StoreZetoni.DataSource = obcine;
                this.StoreZetoni.DataBind();
            }

            NaloziSeznam();
        }

        protected void GridDodeljenoRefresh(object sender, StoreRefreshDataEventArgs e)
        {
            string id = e.Parameters["FunkcionalnostId"];
            NaloziSeznamZetonov(Int32.Parse(id));
        }

        protected void UrediPodatke(Object sender, DirectEventArgs e)
        {
            ZetonRowEditData EditData = XML.Deserialize<ZetonRowEditData>(e.ExtraParams["data"]);
            var fz = EntityFactory.LoadEntity<FunkcionalnostZeton>(
                new Filter<FunkcionalnostZeton>().Where(r => r.FunkcionalnostId == EditData.FunkcionalnostId && r.VarnostniZetonId == EditData.VarnostniZetonId)
            );

            if (fz.EntityState == EntityState.Unchanged)
            {
                fz.Branje = EditData.Branje;
                fz.Pisanje = EditData.Pisanje;
                fz.Update();
            }
        }

        protected void DodajZetone(object sender, DirectEventArgs e)
        {
            List<int> id = e.GetIdList<int>("selected", "VarnostniZetonId");
            int FunkcionalnostId = e.DeserializeParameter<int>("FunkcionalnostId");
            if (id.Count > 0)
            {
                foreach (var varnostniZetonId in id)
                {
                    var vp = EntityFactory.CreateInstance<FunkcionalnostZeton>();
                    vp.VarnostniZetonId = varnostniZetonId;
                    vp.FunkcionalnostId = FunkcionalnostId;
                    vp.Update();
                }
            }
        }

        protected void OdstraniZetone(object sender, DirectEventArgs e)
        {
            List<int> id = e.GetIdList<int>("selected", "VarnostniZetonId");
            int FunkcionalnostId = e.DeserializeParameter<int>("FunkcionalnostId");
            if (id.Count > 0)
            {
                EntityCollection<FunkcionalnostZeton> col = new EntityCollection<FunkcionalnostZeton>(
                    new Filter<FunkcionalnostZeton>().Where(r => r.FunkcionalnostId == FunkcionalnostId).SelectByField(r => r.VarnostniZetonId, id.ToArray())
                );
                col.RemoveAll();
                col.Update();
            }
        }
        #endregion

        #region Private
        private void NaloziSeznam()
        {
            GridSplosniSeznam.LoadData<Funkcionalnost>(
                new Filter<Funkcionalnost>().Where(r => r.FunkcionalnostId != null));
        }

        private void NaloziSeznamZetonov(int funkcionalnostId)
        {
            var a = String.Format(":{0}", funkcionalnostId);


            var test = new EntityCollection<FunkcionalnostZeton>(new Filter<FunkcionalnostZeton>().Where(r => r.FunkcionalnostId == funkcionalnostId));
            //GridDodeljeno.LoadData<VarnostniZeton>(
            //    new Filter<VarnostniZeton>().LeftJoin(new Filter<FunkcionalnostZeton>(), r => r.VarnostniZetonId.ToString() + a.ToString(), s => s.VarnostniZetonId.ToString() + ':' + s.FunkcionalnostId.ToString(), (r, s) => r, (j, k) => (k.VarnostniZetonId != null)).OrderBy(r => r.Naziv));
            GridDodeljeno.LoadData<FunkcionalnostZeton>(
                new Filter<FunkcionalnostZeton>().Where(r => r.FunkcionalnostId == funkcionalnostId));

            GridNeDodeljeno.LoadData<VarnostniZeton>(
                new Filter<VarnostniZeton>().LeftJoin(new Filter<FunkcionalnostZeton>(), r => r.VarnostniZetonId.ToString() + a.ToString(), s => s.VarnostniZetonId.ToString() + ':' + s.FunkcionalnostId.ToString(), (r, s) => r, (j, k) => (k.VarnostniZetonId == null)));
        }
        #endregion
    }
}
